package packLigaDeFutbol;

import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

public class UtilControles {

	/**
	 * @author Andoni
	 * Procedimiento que rellena un combo con un Resultset
	 * El ResultSet necesita tener una columna con alias 'valor' y otra de alias 'nombre'
	 * 
	 * - valor: ser� el valor que devuelva el combo
	 * - nombre: ser� el texto que se muestre en el combo
	 * 
	 * @param pCombo jComboBox que queremos rellenar
	 * @param pRS ResultSet que queremos utilizar para rellenar el combo
	 */
	public static void cargarCombo(JComboBox<comboValue> pCombo, ResultSet pRS ){
		comboValue[] miArray;
		
		pCombo.removeAllItems();
		
		try {
			if (pRS.last()){
				miArray = new comboValue[pRS.getRow()];

				pRS.first();

				String nombre;
				int valor;

				for (int i = 0; i < miArray.length; i++){

					nombre = pRS.getString("nombre");
					valor = pRS.getInt("valor");

					miArray[i] = new comboValue(nombre, valor);
					pRS.next();
				}

				if (miArray.length > 0){
					for (comboValue unElemento : miArray) {
						pCombo.addItem(unElemento);
					}
				}else{
					pCombo.setEnabled(false);
				}

			}
		} catch (SQLException ex) {
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
		}
	}
	
	/**
	 * @author Andoni
	 * Procedimiento que rellena una tabla con un resultset
	 * Como cabecera aparecer�n los nombres de las columnas, se pueden usar alias
	 * Todas las columnas con alias 'id' se ocultar�n
	 * 
	 * @param pTabla jTable que se rellenar� con los datos del ResultSet
	 * @param pRS ResultSet que queremos utilizar para rellenar la tabla
	 */
	public static void cargarTabla(JTable pTabla, ResultSet pRS) {
		String[] columnas;
		Object[] datos;
		DefaultTableModel modelo = new DefaultTableModel();
		
		try {
			if (pRS.last()){
				ResultSetMetaData rsMD = pRS.getMetaData(); //obtenemos los metadatos del resultset
				int numColumnas = rsMD.getColumnCount(); //obtenemos el numero de columnas del resultset
				int idEncontrado = -1; //Para indicar la columna ID
				columnas = new String[numColumnas]; //creamos el array con las dimensiones de las columnas
													//para los nombres de las columnas

				datos = new Object[numColumnas]; //creamos el array con las dimensiones de las columnas y filas
				
				//cargamos los nombres de las columnas
				for (int i = 0; i < numColumnas ; i++) {
					columnas[i] = rsMD.getColumnLabel(i+1);	
					if (columnas[i].equalsIgnoreCase("id")){
						idEncontrado = i;
					}
				}
				
				modelo.setColumnIdentifiers(columnas);
				
				//movemos el cursor a la primera linea
				pRS.first();
				
				int numCol;
				
				//rellenamos los datos de la tabla
				do{

					for (numCol = 0; numCol < numColumnas; numCol++) {						
						datos[numCol] = pRS.getString(numCol + 1);
					}
					modelo.addRow(datos);
				}while (pRS.next());

				pTabla.setModel(modelo);
				
				if (idEncontrado > -1){
					TableColumn column = pTabla.getColumnModel().getColumn(idEncontrado);
				    column.setMinWidth(0);
				    column.setMaxWidth(0);
				    column.setWidth(0);
				    column.setPreferredWidth(0);
				}
				
				
			}else{
				pTabla.setModel(modelo);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**
	 * @author Asier Esteban
	 * @param pTabla
	 * @param pEp
	 */
	
	public static void cargarTablaConArray(JTable pTabla, ArrayList<EquipoPuntos> pEp) {
		DefaultTableModel modelo = (DefaultTableModel) pTabla.getModel();
		Object[] datos = new Object[2];
		Iterator<EquipoPuntos> it = pEp.iterator();
		EquipoPuntos ep;
		while(it.hasNext()) {
			ep = it.next();
			datos[0] = GestorEquipos.getGestorEquipos().nombreEquipo(ep.getEquipo());
			datos[1] = ep.getPuntos();
			modelo.addRow(datos);
		}
		//pTabla.setModel(modelo);
	}
}